const dotenv = require('dotenv')
const { get } = require('env-var')
const path = require('path')
const convict = require('convict')
const ip = require('ip')
const fs = require('fs')
const envFile = path.join(process.cwd(), '.env')
if (!fs.existsSync(envFile)) {
  fs.writeFileSync(envFile, '# 环境变量写在这里')
}
dotenv.config({ path: envFile })
const nodeEnv = get('NODE_ENV').default('development').asString()

const ipAddress = ip.address()
const serviceName = 'iam-service'

const defaultConfig = {
  env: nodeEnv,
  serviceName,
  // 服务端口
  port: 3332,
  // 当前ip
  ip: ipAddress,
  // 上下文
  apiPrefix: get('API_PREFIX').default(`/${serviceName}`).asString(),
  // 开启nacos
  useNacos: get('USE_NACOS').default(0).asInt(),
  // 开启redis
  useRedis: get('USE_REDIS').default(0).asInt(),
  // 默认密码
  defaultPassword: get('DEFAULT_PASSWROD').default('abcd1234').asString(),
  // jsonwebtoken配置
  jwt: {
    secret: get('JWT_SECRET').default('asdjfklajsdkfkljsd').asString(),
    // 过期时间，单位秒
    exp: get('JWT_EXP')
      .default(60 * 60)
      .asInt(),
  },
  redis: {
    host: get('REDIS_HOST').default('localhost').asString(),
    port: get('port').default(6379).asInt(),
  },
  nacos: {
    dataId: get('NACOS_CONFIG_DATA_ID').default('dev-iam-service').asString(),
    url: get('NACOS_HOST').default(`${ipAddress}:8848`).asString(),
    groupId: get('NACOS_GROUP_ID').default('DEFAULT_GROUP').asString(),
    namespace: get('NACOS_NAMESPACE').default('public').asString(),
  },
  database: {
    url: get('DATABASE_URL').required(true).asString(),
  },
}

const config = convict({})
config.load(defaultConfig)
module.exports = config
